Remote desktop technologies (also referred to as “remote access”) allow a local user interacting with a local computing device to control and view a remote desktop session originating from a remote computer or host. A remote desktop client application running on the client computer and a remote desktop server application running on the server computer together facilitate “remoting” a desktop session. The remote desktop client application receives user input, such as keyboard and mouse input, and converts the input into a network-compatible representation to be transmitted to the server computer. The remote desktop server application running on the server computer receives the network-compatible representation of the user input, and converts this representation into actual input messages. The input messages are then sent to the server computer's message queue and processed as if the input was generated at the server computer. Therefore, applications running on the server computer respond to the input as if the input was generated at the server computer.
Remote access protocols often include optimizations that focus on providing smooth remote-session user experiences in different and potentially dynamic environments. Those optimizations include such approaches as the tuning of data exchange rates depending on a network connection speed and/or quality, the tuning of user experience settings to reduce load on a server, and so forth.
In some cases, a user may work in a mixed local and remote environment, wherein the user operates both local and remote applications (i.e., applications running in a remote session) simultaneously. For example, a user may access via remote session an instance of an enterprise docketing software that is only available on a central server, while also running on their local desktop a mail application and a word processing application. As part of their workflow, the user may regularly switch between using docketing software (i.e., the remote application) and using the locally-executing applications. In such use cases, there may be usage patterns in which the running remote applications and as such the remote session(s) are not frequently used, but nonetheless consume client- and server-side computing resources to draw and update the image of the remote session and application content, to consume network bandwidth to exchange data, and, if the client computer is running on a battery, to consume power and as such reduce the computer operating time.
Existing solutions for remote-session user experience optimization are limited to providing the best user experience for an active remote session. There are also means for client applications to optimize resource usage. For example, the client-side application can request updates for visible portions of the remote session screen only. However, such optimizations require the client-side application to explicitly use a particular remote protocol-specific API (if available), so such optimization must be taken into consideration during the client-side application development. Therefore, it is desirable to optimize resource usage of a remote session established between a client and a server.